package sudoku;

import aima.search.framework.HeuristicFunction;

public class SudokuHeuristicFunction implements HeuristicFunction{

	@Override
	public double getHeuristicValue(Object state) {
		SudokuEstado estado = (SudokuEstado) state;
		
		int h = 261;
		
		int[] columnas = new int[SudokuEstado.LADO];
		int[] filas = new int[SudokuEstado.LADO];
		
		for (int i=0; i < SudokuEstado.LADO; i++){
			columnas[i] = 0;
			filas[i] = 0;
		}
		
		for (int i=0; i < SudokuEstado.LADO; i++)
			for (int j=0; j < SudokuEstado.LADO; j++){
				if (estado.getCasilla(i, j) != 0)
				columnas[i]++;
				filas[j]++;
				h--;
			}
		
		for (int i=0; i < SudokuEstado.LADO; i++){
			if (columnas[i] > 6) h-= columnas[i];
			if (filas[i] > 6) h -= filas[i];
		}
		
		return h;
	}

}
